package org.metasketch.javafx.graphics;

import java.util.HashMap;
import java.util.Map;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;

import org.metasketch.graphics.Diagram;

public class DiagramView extends TabPane implements ChangeListener<Number> {

	Map<Diagram, JFXDiagram> diagrams = new HashMap<Diagram, JFXDiagram>();
	Map<Diagram, Tab> diagramTabs = new HashMap<Diagram, Tab>();

	private IDiagramChangeListener listener;

	public DiagramView() {
		// set
		// set
		getSelectionModel().selectedIndexProperty().addListener(this);
	}

	public void setListener(IDiagramChangeListener listener) {
		this.listener = listener;
	}

	public void clear() {
		getSelectionModel().clearSelection();
		getTabs().clear();
		diagrams.clear();
		diagramTabs.clear();
		
		
		
		// getChildren().clear();

	}

	public void showDiagram(Diagram diagram) {
		Tab tab = diagramTabs.get(diagram);
		getSelectionModel().select(tab);

	}

	public void addDiagram(JFXDiagram jfxDiagram) {
		diagrams.put(jfxDiagram.getDiagram(), jfxDiagram);

		Tab tab = new Tab();
		// tab.set
		tab.setText(jfxDiagram.getDiagram().getName() + " - "
				+ jfxDiagram.getDiagram().getType());
		tab.setContent(jfxDiagram);

		getTabs().add(tab);

		diagramTabs.put(jfxDiagram.getDiagram(), tab);

		// showDiagram();

	}

	@Override
	public void changed(ObservableValue<? extends Number> arg0, Number arg1,
			Number arg2) {

		if (listener == null)
			return;

		// Tab tab = getSelectionModel().getSelectedItem();

		Tab tab = getTabs().get(arg2.intValue());

		if (tab == null)
			return;

		JFXDiagram jfxDiagram = (JFXDiagram) tab.getContent();

		listener.diagramSelectionChanged(jfxDiagram.getDiagram());

	}

	// public void addTab(String title, JFXDiagram diagram) {
	//
	// this.addTab(title, diagram);
	//
	// }

	// public void clear(){
	// this.clear();
	// }

}
